/**
 * 给定一个二进制数组 nums 和一个整数 k，如果可以翻转最多 k 个 0 ，则返回 数组中连续 1 的最大个数 。
 */

/**
示例 1：
输入：nums = [1,1,1,0,0,0,1,1,1,1,0], K = 2
输出：6
解释：[1,1,1,0,0,1,1,1,1,1,1]
粗体数字从 0 翻转到 1，最长的子数组长度为 6。

示例 2：
输入：nums = [0,0,1,1,0,0,1,1,1,0,1,1,0,0,0,1,1,1,1], K = 3
输出：10
解释：[0,0,1,1,1,1,1,1,1,1,1,1,0,0,0,1,1,1,1]
粗体数字从 0 翻转到 1，最长的子数组长度为 10。
 */

/**
 * 思路
 * 遍历数组，对于数组的每一项，找到零的个数小于等于K的最长子序列
 * 用count来计算零的个数，leftCount表示子序列零的个数超出K,超出时，改变子序列的左边界
 */
var longestOnes = function (nums, k) {
    let index = 0
    let count = 0
    let leftCount = 0
    let max = 0
    for (let i = 0; i < nums.length; i++) {
        if (nums[i] == 0) {
            count++
        }
        while (leftCount < count - k) {
            if (nums[index] == 0) leftCount++
            index++
        }
        max = Math.max(max, i - index + 1)
    }
    return max
};